<?php
/* -------------------------------------------------------------------------------------
* 	ID:						$Id: class.upload.php 11 2013-09-21 11:43:11Z phone.mueller@googlemail.com $
* 	Letzter Stand:			$Revision: 11 $
* 	zuletzt geaendert von:	$Author: siekiera $
* 	Datum:					$Date: 2013-09-21 11:43:11 +0000 (Sat, 21 Sep 2013) $
*
* 	SEO:mercari by Siekiera Media
* 	http://www.seo-mercari.de
*
* 	Copyright (c) since 2011 SEO:mercari
* --------------------------------------------------------------------------------------
* 	based on:
* 	(c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
* 	(c) 2002-2003 osCommerce - www.oscommerce.com
* 	(c) 2003     nextcommerce - www.nextcommerce.org
* 	(c) 2005     xt:Commerce - www.xt-commerce.com
*
* 	Released under the GNU General Public License
* ----------------------------------------------------------------------------------- */

defined( '_VALID_XTC' ) or die( 'Direct Access to this location is not allowed.' );

class upload {
	var $file, $filename, $destination, $permissions, $extensions, $tmp_filename;
	
	function __construct($file = '', $destination = '', $permissions = '777', $extensions = '') {
	
		$this->set_file($file);
		$this->set_destination($destination);
		$this->set_permissions($permissions);
		$this->set_extensions($extensions);
		
		if (not_null($this->file) && not_null($this->destination)) {
			if(($this->parse() == true) && ($this->save() == true))
				return true;
			else
				return false;
		}
	}
	
	function parse() {
		global $message_stack;
		if(isset($_FILES[$this->file])) {
			$file = array('name' => $_FILES[$this->file]['name'],
							'type' => $_FILES[$this->file]['type'],
							'size' => $_FILES[$this->file]['size'],
							'tmp_name' => $_FILES[$this->file]['tmp_name']);
							
		} else {
			$file = array('name' => $GLOBALS[$this->file.'_name'],
							'type' => $GLOBALS[$this->file.'_type'],
							'size' => $GLOBALS[$this->file.'_size'],
							'tmp_name' => $GLOBALS[$this->file]);
		}
		if(not_null($file['tmp_name']) && ($file['tmp_name'] != 'none') && is_uploaded_file($file['tmp_name'])) {
			if (sizeof($this->extensions) > 0) {
				if (!in_array(strtolower(substr($file['name'], strrpos($file['name'], '.')+1)), $this->extensions)) {
					$message_stack->add_session(ERROR_FILETYPE_NOT_ALLOWED, 'error');
					return false;
				}
			}
			
			$this->set_file($file);
			$this->set_filename($file['name']);
			$this->set_tmp_filename($file['tmp_name']);
			
			return $this->check_destination();
			
		} else {		
			if ($file['tmp_name']=='none') 
				$message_stack->add_session(WARNING_NO_FILE_UPLOADED, 'warning');
			return false;
		}
	}
	
	function save() {
		global $message_stack;
		
		if (substr($this->destination, -1) != '/') $this->destination .= '/';
		
		if (!function_exists(imagecreatefromgif)) {
			if ($this->destination==DIR_FS_CATALOG_ORIGINAL_IMAGES) {
				if (strstr(PRODUCT_IMAGE_THUMBNAIL_MERGE,'.gif') ||
				strstr(PRODUCT_IMAGE_INFO_MERGE,'.gif') || 
				strstr(PRODUCT_IMAGE_ICON_MERGE,'.gif') ||
				strstr(PRODUCT_IMAGE_POPUP_MERGE,'.gif')) {
				
				$message_stack->add_session(ERROR_GIF_MERGE, 'error');
				return false;
				
				}
				if (strstr($this->filename,'.gif')) {
					$message_stack->add_session(ERROR_GIF_UPLOAD, 'error');
					return false;
				}
			}
		}
		
		if (move_uploaded_file($this->file['tmp_name'], $this->destination.$this->filename)) {
			chmod($this->destination.$this->filename, $this->permissions);
			$message_stack->add_session(sprintf(SUCCESS_FILE_SAVED_SUCCESSFULLY, $this->filename), 'success');
			return true;
			
		} else {
			$message_stack->add_session(ERROR_FILE_NOT_SAVED, 'error');
			return false;
		}
	}
	
	function set_file($file) {
		$this->file = $file;
	}
	
	function set_destination($destination) {
		$this->destination = $destination;
	}
	
	function set_permissions($permissions) {
		$this->permissions = octdec($permissions);
	}
	
	function set_filename($filename) {
		$this->filename = $filename;
	}
	
	function set_tmp_filename($filename) {
		$this->tmp_filename = $filename;
	}
	
	function set_extensions($extensions) {
		if (not_null($extensions)) {
			if (is_array($extensions))
				$this->extensions = $extensions;
			else
				$this->extensions = array($extensions);

		} else
			$this->extensions = array();
	}
	
	function check_destination() {
		global $message_stack;
		
		if (!is_writeable($this->destination)) {
			if(is_dir($this->destination))
				$message_stack->add_session(sprintf(ERROR_DESTINATION_NOT_WRITEABLE, $this->destination), 'error');
			else
				$message_stack->add_session(sprintf(ERROR_DESTINATION_DOES_NOT_EXIST, $this->destination), 'error');
			
			return false;
			
		} else
			return true;
	}	
}
?>